package br.com.baco.evento.persistencia;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.baco.evento.dominio.Evento;
import br.com.baco.persistencia.AndroidDatabase;

public class EventoDAO extends AndroidDatabase implements IEventoDAO {

	public static final String NOME_TABELA = "eventos";
    public static final String COLUNA_ID = "id";
    public static final String COLUNA_NOME = "nome";
    public static final String COLUNA_DATA = "data";
    public static final String COLUNA_HORARIO = "horario";
    public static final String COLUNA_TIPO = "tipo";
    public static final String COLUNA_QUANT_CONV = "quant_convidados";
    public static final String COLUNA_ID_USUARIO = "id_usuario";

	public EventoDAO(Context context) {
		// TODO Auto-generated constructor stub
		super(context);
	}

	@Override
	public Evento salvar(Evento evento) {
		
		// TODO Auto-generated method stub
		int id;
		ContentValues values = this.getContentValues(evento);
		this.openConnection();
		id = (int) this.database.insert(NOME_TABELA, null, values);
		if(id != -1){
			evento.setId(id);
			//Endereco endereco = this.getEnderecoDao().salvar(evento.getEndereco());
			//if(endereco == null) return null;
			
			//evento.setEndereco(endereco);
			
			this.closeConnection();
			return evento;
		}
		this.closeConnection();
		return null;
	}

	@Override
	public boolean editar(Evento evento) {
		// TODO Auto-generated method stub
		long number;
		ContentValues values = this.getContentValues(evento);
		this.openConnection();
		String[] substitutesValues = {
                String.valueOf(evento.getId())
        };
		
		number = this.database.update(NOME_TABELA, values, COLUNA_ID + " = ?", substitutesValues);
		if(number != 0){				
			this.closeConnection();
			return true;
		}
		
		this.closeConnection();
		return false;
	}

	@Override
	public boolean excluir(Evento evento) {
		// TODO Auto-generated method stub
		this.openConnection();
		String[] substitutesValues = {
				 String.valueOf(evento.getId())
		};
		if(this.database.delete(NOME_TABELA, COLUNA_ID + " =  ?", substitutesValues) != 0){
			 this.closeConnection();
			 return true;
		}
		this.closeConnection();
		return false;
	}

	@Override
	public Evento getById(int id) {
		// TODO Auto-generated method stub
		this.openConnection();
		String query = "SELECT * FROM " + NOME_TABELA +" WHERE "+COLUNA_ID+" = ?";
		String[] substitutesValues = {String.valueOf(id)};
        Cursor cursor = this.database.rawQuery(query, substitutesValues);
        List<Evento> eventos = this.getObjectOfCursor(cursor);
        this.closeConnection();
 
        return eventos.isEmpty()? null: eventos.get(0);
	}

	@Override
	public List<Evento> getAll() {
		// TODO Auto-generated method stub
		this.openConnection();
		String query = "SELECT * FROM " + NOME_TABELA;
        Cursor cursor = this.database.rawQuery(query, null);
        List<Evento> eventos = this.getObjectOfCursor(cursor);
        this.closeConnection();
        System.out.println("DAO");
        System.out.println(eventos);
        return eventos;
	}

	@Override
	public ContentValues getContentValues(Evento evento) {
		// TODO Auto-generated method stub
		ContentValues values = new ContentValues();
		
		values.put(COLUNA_NOME, evento.getNome());
		values.put(COLUNA_DATA, evento.getData());
		values.put(COLUNA_HORARIO, evento.getHorario());
		values.put(COLUNA_TIPO, evento.getTipo());
		values.put(COLUNA_QUANT_CONV, evento.getQuantConvidados());
		values.put(COLUNA_ID_USUARIO, 1);
		
		return values;
	}

	@Override
	public List<Evento> getObjectOfCursor(Cursor cursor) {
		// TODO Auto-generated method stub
		List<Evento> eventos = new ArrayList<Evento>();
        if(cursor == null)
            return eventos;
         
        try {
 
            if (cursor.moveToFirst()) {
                do {
 
                    int indexId = cursor.getColumnIndex(COLUNA_ID);
                    int indexNome = cursor.getColumnIndex(COLUNA_NOME);
                    int indexHorario = cursor.getColumnIndex(COLUNA_HORARIO);
                    int indexTipo = cursor.getColumnIndex(COLUNA_TIPO);
                    int indexData = cursor.getColumnIndex(COLUNA_DATA);
                    int indexQuantConv = cursor.getColumnIndex(COLUNA_QUANT_CONV);
                    
                    Evento evento = new Evento();
                    int eventoId = cursor.getInt(indexId);
                    evento.setId(eventoId);
                    evento.setNome(cursor.getString(indexNome));
                    evento.setHorario(cursor.getString(indexHorario));
                    evento.setTipo(cursor.getString(indexTipo));
                    evento.setData(cursor.getString(indexData));
                    evento.setQuantConvidados(cursor.getInt(indexQuantConv));
 
                    eventos.add(evento);
 
                } while (cursor.moveToNext());
            }
             
        } finally {
            cursor.close();
        }
        return eventos;
	}
}
